<?php

require_once 'config.php';
require_once 'classes/Versement.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/**
 * Classe de service crud pour la gestion de versement
 *
 * @author Alain
 */
class SCversement implements SCinterface {
   
        private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute un Type de Race
    * @param Versement Versement à ajouter
     * @return Message
    */
   public function ajouter($unVersementAAjouter) {
       try{
           
           $query =  $this->db->prepare("INSERT INTO versement " .
                   "(id, ccp, date, montant, type, remarque, animal_id, contrat_id, personne_id) 
                    VALUES(:id, :ccp, :date, :montant, :type, :remarque, :animal_id, :contrat_id, :personne_id)");

           $query->execute(array(
               'id'             => $unVersementAAjouter->getId(),
               'ccp'            => $unVersementAAjouter->getCcp(),
               'date'           => $unVersementAAjouter->getDate(),
               'montant'        => $unVersementAAjouter->getMontant(),
               'type'           => $unVersementAAjouter->getType(),
               'remarque'       => $unVersementAAjouter->getRemarque(),
               'animal_id'      => $unVersementAAjouter->getAnimal_id(),
               'contrat_id'     => $unVersementAAjouter->getContrat_id(),
               'personne_id'    => $unVersementAAjouter->getPersonne_id()

               ));
           $unVersementAAjouter->setId($this->db->lastInsertId());
               $query->closeCursor();
       }
       catch(PDOException $e)
        {
            print($e->getMessage());
            return new Message("Versement non ajouté");
        }
               return $unVersementAAjouter;
   }
    /**
     * Methode permettant de modifier un versement
     * @param Versement Versement à modifier
     * @return Message  
     */
    public function modifier($unVersementAModifier){
        try{

            $query =  $this->db->prepare("UPDATE versement SET ".
                "ccp = :ccp, date = :date, montant = :montant, type = :type, remarque = :remarque, 
                 animal_id = :animal_id, contrat_id = :contrat_id, personne_id = :personne_id ".
                "WHERE id = :id;");

            $query->execute(array(
                'id'           => $unVersementAModifier->getId(),
                'ccp'          => $unVersementAModifier->getCcp(),
                'date'         => $unVersementAModifier->getDate(),
                'montant'      => $unVersementAModifier->getMontant(),
                'type'         => $unVersementAModifier->getType(),
                'remarque'     => $unVersementAModifier->getRemarque(),
                'animal_id'    => $unVersementAModifier->getAnimal_id(),
                'contrat_id'   => $unVersementAModifier->getContrat_id(),
                'personne_id'  => $unVersementAModifier->getPersonne_id()

            ));

            $query->closeCursor();

            $message = new Message("Versement modifié");      
           
           }
                catch(PDOException $e)
        {
          
            $message = new Message("Versement non modifié :".$e->getMessage());
        }
               return $message;
    }
    /**
     * Methode permettant de supprimer un Versement
     * @param Versement Type De Race à supprimer
     * @return Message 
     */
    public function supprimer($unVersementASupprimer){
        try{
        $query = "DELETE FROM versement WHERE id='".$unVersementASupprimer."';";
                   
                $this->db->query($query);
                $message = new Message("Versement supprimé");
          
                }
                catch(PDOException $e)
        {

            $message = new Message("Versement non supprimé : ".$e->getMessage());
        }
               return $message;
    }
   
    /**
     *
     * @param Versement Versement de recherche sous forme d'objet Versement
     * @return un tableau d'objet Versement
     */
    public function lister($versementALister){
        try{
         

            $sql="SELECT * FROM versement ";
            $sql_Where="WHERE";
            if($versementALister->getId()!=NULL){
                      $sql_Where.=" id = '".$versementALister->getId()."' AND ";
            }         
            if($versementALister->getDate()!=NULL){
                      $sql_Where.=" date = '".$versementALister->getDate()."' AND ";
            }         
            if($versementALister->getType()!=NULL){
                      $sql_Where.=" type = '".$versementALister->getType()."' AND ";
            }         
            if($versementALister->getPersonne_id()!=NULL){
                      $sql_Where.=" personne_id = '".$versementALister->getPersonne_id()."'";
            }         


            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where." order by date;";
            $lesVersementsTrouvees=NULL;
            $unTypeLu=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $unTypeLu = new Versement($row["id"], $row["ccp"], $row["date"], $row["montant"], $row["type"], $row["remarque"], $row["animal_id"], $row["contrat_id"], $row["personne_id"]);
               
                    $lesVersementsTrouvees[]=$unTypeLu;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesVersementsTrouvees=NULL;
        }
        return $lesVersementsTrouvees;
    }
    
    
}

?>